package com.cn.wanxi.util;

import java.util.Date;

public class ReadMe {
    /**
     * 2022-7-19
     * 根据数据库的表创建Java的model层
     * 因为每个表里面都有共同的列名，所以，在model层封装了一个父类
     * Java后台三层架构
     * servlet  页面控制层   和前端打交道，处理前端传递过来的数据和返回给前端的数据
     * service   服务逻辑层  处理逻辑关系
     * dao   数据持久层  和数据库打交道
     * TIMESTAMP和DATETIME的区别？
     * PreparedStatement和statement的区别？
     * CREATE TABLE `canyin04`.`online` (
     *   `id` INT NOT NULL AUTO_INCREMENT,
     *   `name` VARCHAR(45) NULL,
     *   `phone` VARCHAR(45) NULL,
     *   `content` VARCHAR(45) NULL,
     *   `email` VARCHAR(45) NULL,
     *   `create_time` TIMESTAMP NULL default now(),
     *   PRIMARY KEY (`id`));
     * -------------------------------------------
     * 今日任务：
     * 1.创建servlet
     *    六大步骤
     * 2.创建service 服务逻辑层
     * 3.创建dao层  1.sql语句编写，第二个  调用JDBC
     */
    /**
     * 2022-7-20
     * 后台三层架构：编写规则
     * 1.加密
     * 2.sql语句拼接：模糊查询
     * 如果状态码是以4开头 ：404.405，406就表示前端访问不到后台，一般情况下是前端的原因
     * 如果状态码是以5开头：500，501就表示是后台的原因
     * -------------------------
     * 如果代码里面有相同的或者相似的代码，我们可以考虑将公共部分提取出来
     * 提取公共的BaseService和BaseDao
     * 封装ResultModel，将主要的几个方法写入到自己的类里面
     * 今日任务：
     * 1.将你们所有的表，增删查改全部做完，
     * 2.能够封装就封装，不能封装就不管他
     * 3.预习前端js的用法
     *
     */
    /**
     * 2022-7-21
     * 字符串转换为BigDecimal
     * 对于图片上传和产品新增，一般情况下将这两个功能分开
     * 图片上传需要得到图片上传的地址
     * 产品新增就拿到刚刚的地址，和其他参数（产品名称，价格等）
     * ----------------------------------------
     * 所以，需要对图片上传进行单独编写
     * 时间戳：Java用数据类型：long，String
     * 文件上传工具类的思路
     * 1.创建文件夹：将文件保存到那个文件夹里面去
     * 2.得到文件名称：重新命名：时间戳+原来文件的名称
     * 3.item.write(storeFile);保存文件
     * -------------------------------
     * 要学会copy文件
     * ----------------------
     * 今日任务：
     * 能否做一个文件上传，并保存到自己的文件目录里面
     * 把后台代码全部完成
     * 预习js
     */
    /**
     * 2022-7-22
     * 第四阶段：做一个后台管理系统：通过别人的代码能够尽快入手，上手项目
     * ----------------------------------------
     * 1.下载模板代码
     * 2.不要直接去修改模板代码，而是引入
     * 3.创建自己的包，写自己的代码
     * 4.看懂别人的代码
     */

    /**
     * 2022-7-25登录
     * 1.要学会看流程图（建议：能够自己画流程图）
     * 2.能够根据流程图写代码
     * ---------------------------
     * layui默认进行格式判断 lay-verify="required"
     * phone: [/^1\d{10}$/, "请输入正确的手机号"],
     * 中括号左边的就是正则表达式
     * -----------------------
     * 以后数据持久层最好返回和数据库数据相关，不要直接返回其他信息,把层次弄清晰
     * --------------------------------------
     * 前端逻辑：
     * 1.判断用户输入格式是否正确，用自定义验证
     * 2.监听提交按钮 //不让刷新页面
     *             return false;
     * 3.为了方便：在监听按钮第一句代码写： data = data.field;
     * 4.调用后台ajax进行查询，并得到返回值console.log(res);
     * 5.通过返回值，进行逻辑判断，到底是失败还是成功
     *
     */
    /**
     * 2022-7-26
     * 登录成功跳转到管理页面，欢迎页面
     * 在其他页面可以得到登录名
     * 所以，在页面加载完成，需要对div进行赋值
     * 在一个页面里面存值，在另一个页面进行接受？
     * 如果是Java？
     * 如果是JavaScript？
     * -------------------
     * servlet 作用域？ req，session,application
     * 表格查询步骤：
     * 1.复制table：<table class="layui-hide" id="user" lay-filter="test"></table>
     * 2.复制操作栏：<script type="text/html" id="barDemo">
     * 3.复制js：layui.use('table', function () {
     * 4.修改表格渲染：
     *      1）修改地址： url: '/back/user/findAll'
     *      2）想要显示打印到控制台：  , parseData: function (res)
     *      3）想要显示数据：field: 'id'（对应model里面的属性）, title: 'ID'（表格显示的内容）,width: 80,fixed: 'left'
     * --------------------------------------
     * 后台代码逻辑：添加分页的代码即可
     */
    /**
     * 2022-7-27 新增
     * 1.创建新增页面：将表单补全
     * 2.创建js，必须加载form表单和日期表单
     * 3.监听按钮，并得到数据
     * 4.复选框得到数据
     * 5.注意：以后只要有用户输入，都必须做自定义验证
     * 6.调用ajax访问后台代码
     * ----------------------------------
     * 删除：
     * 1.监听工具栏事件
     * 2.弹出提示框，提示用户是否删除
     * 提起公共方法的ajax
     * 3.调用myAjax方法，进行删除
     *
     */
    /**
     * 2022-7-28 编辑
     * 1.点击编辑按钮，应该弹出一个编辑页面,注意，不能直接把密码编辑放入这里
     * 2.点击编辑按钮，不是将当前数据直接传递到新页面，而是得到当前的id将id传递到编辑页面
     * 3.在编辑页面加载完成时，需要通过id去数据库里面查询数据，
     * 4.将查询的数据回显到编辑页面
     * 5.当用户重新对编辑页面进行修改时，拿到页面数据进行ajax提交到后台进行修改
     * ----------------------------------------------
     * 1.在member-list.js添加编辑的代码
     * sessionStorage.setItem("userId", data.id);
     * xadmin.open('编辑用户', '/html/user/product-edit.html', 600, 400);
     * 2.在member-edit.js添加根据id查询数据库findById();
     * 3.在member-edit.js添加赋值setUserData(res.data);
     * -------------------------------------
     * 对于前端生日只显示年月日的时候，而数据库有时分秒，
     * 1.直接在表格渲染的时候通过模板去设置年月日（不推荐）
     * 2.在Java代码里面通过赋值到list的时候，去截取年月日(不推荐)
     * 3.直接在sql语句里面查询出只有年月日的生日数据(推荐)
     * 注意：能够在数据库里面做的事情，不要拿到Java里面去做，
     * 能够在前端做的事情，不要拿到Java里面来做
     * 不要所有的事情都在服务器里面去做（非必要）
     * -----------------------------------------
     * 难点：表单赋值
     * find_in_set(值,列)
     */
    /**
     * 2022-7-29 产品查询和新增
     * 查询
     * 1.创建页面，复制table
     * 2.创建js，复制layui模板加载,修改访问后台的接口和列对应的model属性
     * 3.编写后台代码逻辑
     * ---------------------------
     * 容易出现错误的地方：
     * 1.字符串转换为BigDecimal
     * 2.sql语句拼接的时候空指针异常
     * ----------------------------------------------------
     * 增加产品
     * 1.点击增加按钮，创建一个增加页面
     * 2.页面加载完成，将菜系查询出来并赋值到下拉菜单
     * 3.文件上传
     * 4.富文本
     * 5.得到数据，调用ajax
     */
    /**
     * 2022-8-1 产品编辑
     * 1.点击编辑按钮，跳转到编辑页面，同时，将id传递到编辑页面
     * 2.编辑页面加载完成时，同时，需要将菜系得到，并渲染给编辑页面。根据id去后台查询数据
     * 3.将查询出的数据渲染到页面
     * 4.点击编辑按钮，进行编辑数据
     * 5.如果编辑成功，则刷新表格，如果失败，则提示编辑失败
     * ----------------------------------------------------
     * 当用户直接访问后台管理系统的页面时，也可以直接进行CRUD，不用进行登录，则不安全
     * 所以，我们需要用户进行登录，那么怎么判断用户是否已经登录了呢？
     * 可以在客户端设定一个值，然后通过这个值是否存在，来判断用户已经登录
     * 如果没有登录，则直接跳转到登录页面
     * 所以，在任何一个需要哦用户登录的页面加载完成都要去判断用户是否已经登录
     * 那么就是每个页面都要用js去判断用户是否已经登录，我们就需要写一个公用的js去调用即可
     * $(function () {
     *     let username = sessionStorage.getItem("username");
     *     if (username == null) {
     *         location.href = "/html/login.html";
     *     }
     * })
     * --------------------------------------------
     * 为了防止有坏人直接通过接口进入后台，所以，我们需要对进入后台的人也要判断是否已经登录
     * 那么对于后台来说，我们也需要将登录成功的标识放到某个地方，然后所有访问后台的人都去调用某个方法
     * 但是，每个地方都去调用，很麻烦，所以有没有更方便的方法呢？
     * 过滤器:
     * 1.创建自己的过滤器，继承自带的过滤器
     * 2.重写父类的doFilter
     * 3.设置需要判断用户登录的地址
     * 4.根据用户是否已经登录进行判断是否跳转到后台接口还是登录页面
     * ---------------------------------------
     * 对于过滤器的地址：可以直接写/* 或者/back/*
     *
     */
}
